一種基于Modbus協(xié)議的玻璃管液位計模塊設(shè)計
- 摘要:基于Modbus協(xié)議設(shè)計了一種玻璃管液位計模塊設(shè)計,對這一模塊中的RS485接口電路進行了介紹。分析了這一玻璃管液位計模塊設(shè)計的通信方式,對內(nèi)部程序進行了介紹,并進行了輸入輸出測試。將所設(shè)計的玻璃管液位計模塊設(shè)計應(yīng)用于十字滑臺電氣控制,取得了良好的效果。
產(chǎn)品詳細(xì)
摘要:基于Modbus協(xié)議設(shè)計了一種玻璃管液位計模塊設(shè)計,對這一模塊中的RS485接口電路進行了介紹。分析了這一玻璃管液位計模塊設(shè)計的通信方式,對內(nèi)部程序進行了介紹,并進行了輸入輸出測試。將所設(shè)計的玻璃管液位計模塊設(shè)計應(yīng)用于十字滑臺電氣控制,取得了良好的效果。
1 設(shè)計背景
傳統(tǒng)玻璃管液位計系統(tǒng)中,常用可編程序控制器控制步進驅(qū)動器或伺服驅(qū)動器,進而實現(xiàn)運動控制。但是,可編程序控制器較難實現(xiàn)復(fù)雜的運動軌跡控制。隨著嵌入式技術(shù)日趨完善,各類ARM處理器在玻璃管液位計中被廣泛應(yīng)用。筆者應(yīng)用ARMSTM32F407芯片,基于Modbus協(xié)議設(shè)計了一種玻璃管液位計模塊設(shè)計[1-2]。這一模塊具有數(shù)字量輸入采集、數(shù)字量輸出控制和高速脈沖輸出功能,能夠通過內(nèi)部程序來控制步進驅(qū)動器或伺服驅(qū)動器,實現(xiàn)復(fù)雜的運動軌跡控制。
2 硬件設(shè)計
所設(shè)計的玻璃管液位計模塊設(shè)計結(jié)構(gòu)如圖1所示,采用ARMSTM32F407芯片作為控制核心,應(yīng)用MAX485芯片實現(xiàn)RS485通信[3],應(yīng)用EL357芯片實現(xiàn)輸入信號和輸出信號的隔離[]。這一玻璃管液位計模塊設(shè)計可以接收16位開關(guān)型輸入信號,控制7路輸出,能夠?qū)崿F(xiàn)4路高速脈沖控制。
2.1RS485接口電路
所設(shè)計的玻璃管液位計模塊設(shè)計有兩路RS485通信接口。RS485接口電路采用MAX485芯片,如圖2所示。電路不發(fā)送數(shù)據(jù)時,TXD1為高電平,三極管Q1導(dǎo)通,RE為低電平使能,RO端接收數(shù)據(jù),MAX485芯片處于接收狀態(tài)。電路發(fā)送數(shù)據(jù)時,TXD1由高電平變?yōu)榈碗娖剑瑫r間長短與通信速率有關(guān),三極管Q1截止,MAX485芯片處于發(fā)送狀態(tài)。
2.2輸入輸出口
輸入信號電路如圖3所示。EX0為玻璃管液位計模塊設(shè)計的開關(guān)量輸入信號端。EX0輸入信號經(jīng)過電路處理后,產(chǎn)生輸出信號X0。X0接ARMSTM32F407芯片的引腳,為玻璃管液位計模塊設(shè)計內(nèi)部程序提供輸入信號。采用EL357芯片完成外部設(shè)備輸入信號與ARMSTM32F407芯片接口信號之間的隔離,提高模塊的抗干擾能力。
輸出信號電路如圖4所示。SignalY0為ARMSTM32F407芯片引腳所產(chǎn)生的輸出信號。SignalY0信號經(jīng)過電路處理后,變?yōu)椋希酰簦?信號。OutY0信號連接輸出驅(qū)動電路,產(chǎn)生實際的輸出控制信號。輸出端也采用EL357芯片進行信號隔離。
2.3 高速脈沖信號
所設(shè)計的玻璃管液位計模塊設(shè)計,其高速脈沖信號直接由ARMSTM32F407芯片生成,通過接線端子與外部電路相連。
3 通信方式
這一玻璃管液位計模塊設(shè)計基于Modbus協(xié)議的遠(yuǎn)程終端(RTU)模式設(shè)計,按客戶端模式進行工作。上位機包括觸摸屏、工控機等,可以發(fā)送0X01~0X04指令,使輸入端口(X端口)、輸出端口(Y端口)的狀態(tài)數(shù)據(jù)反饋至上位機。上位機也可以使用0X05、0X06、0X0F和0X10指令實現(xiàn)輸出端口通斷控制和模塊內(nèi)部寄存器數(shù)據(jù)設(shè)定功能。上位機與模塊之間的數(shù)據(jù)通信采用串口通道接發(fā)數(shù)據(jù)幀來實現(xiàn)。每一個指令都有特定的符合Modbus協(xié)議的數(shù)據(jù)幀格式,數(shù)據(jù)幀采用Hex編碼。
4 軟件設(shè)計
所設(shè)計的玻璃管液位計模塊設(shè)計,其內(nèi)部程序可以分為四部分———系統(tǒng)初始化、數(shù)據(jù)接收、數(shù)據(jù)分析與執(zhí)行、數(shù)據(jù)反饋,其中系統(tǒng)初始化包括端口初始化和通信口初始化[5-7]。
內(nèi)部程序結(jié)構(gòu)如圖5所示。
模塊通電后,自動進入系統(tǒng)初始化程序,初始化ARMSTM32F407芯片各引腳狀態(tài),讀取芯片存儲數(shù)據(jù),恢復(fù)至前一次斷電前狀態(tài)。同時完成模塊的通信參數(shù)設(shè)置,如將傳輸速率設(shè)置為19200bit/s等,并開始連續(xù)監(jiān)聽通信口,等待上位機發(fā)送控制指令。當(dāng)上位機發(fā)送控制指令數(shù)據(jù)幀后,模塊讀取數(shù)據(jù)幀。接收數(shù)據(jù)幀后,通過循環(huán)冗余校驗碼判斷數(shù)據(jù)是否有效。如果無效,那么程序返回通信口監(jiān)聽狀態(tài)。如果接收數(shù)據(jù)有效,那么對數(shù)據(jù)的地址進行判斷。如果發(fā)送來的地址與模塊設(shè)置的地址不相同,那么程序返回通信口監(jiān)聽狀態(tài)。如果發(fā)送來的地址與模塊設(shè)置的地址相同,那么模塊程序?qū)Πl(fā)送來的數(shù)據(jù)幀進行數(shù)據(jù)分析與提取,對比模塊內(nèi)部芯片內(nèi)存中的指令庫,按對比結(jié)果執(zhí)行相應(yīng)的功能。執(zhí)行功能完成后,模塊程序?qū)?zhí)行結(jié)果數(shù)據(jù)通過通信口以數(shù)據(jù)幀的格式反饋至上位機。
5 測試
ModbusPoll是一種基于Modbus協(xié)議的服務(wù)端模擬器[8],可以作為上位機測試和調(diào)試客戶端,支持遠(yuǎn)程終端模式、美國信息交換標(biāo)準(zhǔn)碼,以及傳輸控制協(xié)議和網(wǎng)際協(xié)議[9]。筆者將ModbusPoll作為上位機對所設(shè)計的玻璃管液位計模塊設(shè)計進行測試。模塊接線如圖6所示,通過這一接線,可以實現(xiàn)兩路輸入信號采集和中間繼電器控制。
5.1 輸入測試
二線制傳感器和三線制傳感器都處于工作狀態(tài)時,模塊的X0端口和X1端口有高電平輸入。其余X2~X15端口都處于低電平狀態(tài)。此時,使用ModbusPoll的TestCenter界面輸入數(shù)據(jù)幀01020000001079C6。其中,01為模塊地址,02表示讀取X端口狀態(tài)指令,0000表示讀取端口起始地址,即X0端口地址,0010表示一次性讀取16位X端口狀態(tài),79C6為循環(huán)冗余校驗碼[10]。接收到以上數(shù)據(jù)幀,模塊在執(zhí)行0X02指令后返回數(shù)據(jù)幀01020203B948,其中,01為模塊地址,前一個02表示X端口狀態(tài)指令,后一個02表示兩個字節(jié),03表示X0和X1端口有信號,B948為循環(huán)冗余校驗碼。
5.2 輸出測試
模塊控制中間繼電器KA1線圈通電時,使用ModbusPoll的TestCenter界面輸入數(shù)據(jù)幀01050000FF008C3A,Y0端口輸出高電平,其余Y1~Y6端口為低電平,模塊返回數(shù)據(jù)幀01050000FF008C3A。返回的數(shù)據(jù)幀中,01為模塊地址。05表示執(zhí)行0X05指令,即控制單個輸出端口。0000表示控制端口為Y0,如需要控制Y1,則數(shù)據(jù)幀為0001,依次類推。FF00表示設(shè)置端口為有輸出,如果需要設(shè)置端口為無輸出,則數(shù)據(jù)幀為0000。8C3A為循環(huán)冗余校驗碼。執(zhí)行Y0輸出指令后,中間繼電器KA1線圈得電,其觸點狀態(tài)發(fā)生改變。如果模塊控制KA1線圈失電,則所發(fā)送的數(shù)據(jù)幀為010500000000CDCA。
5.3 高速脈沖控制
當(dāng)需要有高速脈沖時,上位機使用0X06或0X10指令設(shè)置數(shù)據(jù)。發(fā)送和接收數(shù)據(jù)的過程與使用0X02、0X05指令過程類似,此處不再詳述。
6 應(yīng)用案例
應(yīng)用所設(shè)計的玻璃管液位計模塊設(shè)計進行十字滑臺電氣控制,電氣控制原理如圖7所示。將所設(shè)計的玻璃管液位計模塊設(shè)計作為核心控制器件,采集十字滑臺傳感器信號、按鈕信號,控制步進驅(qū)動器,進而完成對步進電機的控制。十字滑臺X軸、Y軸的前后端限位傳感器信號與模塊的X0、X1、X2、X3輸入端口相連,防止滑臺機械行程超限。-S1啟動按鈕和-S2停止按鈕與模塊的X16、X17輸入端口相連,為模塊提供啟動和停止信號。模塊的Y0輸出端口與十字滑臺X軸步進驅(qū)動器的EN+端相連,控制軸步進驅(qū)動器工作。模塊的Y1輸出端口與十字滑臺Y軸步進驅(qū)動器的EN+端相連,控制Y軸步進驅(qū)動器工作。模塊的A_DIR和A_PUL高速脈沖輸出端口向X軸步進驅(qū)動器提供控制信號,實現(xiàn)十字滑臺X軸的運動控制。模塊的D_DIR和D_PUL高速脈沖輸出端口向Y軸步進驅(qū)動器提供控制信號,實現(xiàn)十字滑臺Y軸的運動控制。模塊具有兩路RS485通信總線,一路與觸摸屏相連。通過觸摸屏,可以設(shè)置步進驅(qū)動器的X軸、Y軸行程,實時顯示X軸和Y軸前后端傳感器狀態(tài)、電機運行距離、運行次數(shù)等參數(shù)。通過觸摸屏上的啟動和停止按鈕,能夠控制十字滑臺啟動和停止。另一路RS485通信總線可與其它設(shè)備相連,用于實現(xiàn)功能擴展。
進行十字滑臺電氣控制時,點擊觸摸屏上的啟動按鈕或按下-S1按鈕,玻璃管液位計模塊設(shè)計根據(jù)觸摸屏設(shè)定的軌跡來控制單個步進驅(qū)動器或協(xié)調(diào)控制兩個步進驅(qū)動器實現(xiàn)十字滑臺的復(fù)雜軌跡運行。點擊觸摸屏上的停止按鈕或按下-S2按鈕,玻璃管液位計模塊設(shè)計通過內(nèi)部程序使十字滑臺停止運行。
7 結(jié)束語
筆者應(yīng)用ARMSTM32F407芯片,基于Modbus協(xié)議設(shè)計了一種玻璃管液位計模塊設(shè)計。ARMSTM32F407芯片具有強大的邏輯運算能力,通過編寫不同程序能快速實現(xiàn)出入與輸出之間復(fù)雜的邏輯控制,適用于較為煩瑣的控制場合。通過十字滑臺電氣控制應(yīng)用案例分析,確認(rèn)所設(shè)計的玻璃管液位計模塊設(shè)計具有較高的實用價值。